<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of ClienteDAO
 *
 * @author thales
 */
class ClienteDAO {
    public $conn = null;
    
    public function __construct() {
        $this->conn = DB::getConn();
    }
    
    /**
     * Método responsávelpor inserir um novo usuário.
     * 
     * @param UsuarioVO $objUsuario
     * @return Último id do usuário inserido 
     */
    public function salvar(ClienteVO $objCliente){
        $sql = 'Insert into cliente (nome,email,telefone,celular,cidade,bairro,uf,cep,complemento,nascimento,genero) values (?,?,?,?,?,?,?,?,?,?,?)';
        
        $stt = $this->conn->prepare($sql);  
        $stt->bindValue(1,  $objCliente->getNome()       ,PDO::PARAM_STR);
        $stt->bindValue(2,  $objCliente->getEmail()      ,PDO::PARAM_STR);
        $stt->bindValue(3,  $objCliente->getTelefone()   ,PDO::PARAM_STR);
        $stt->bindValue(4,  $objCliente->getCelular()    ,PDO::PARAM_STR);
        $stt->bindValue(5,  $objCliente->getCidade()     ,PDO::PARAM_STR);
        $stt->bindValue(6,  $objCliente->getBairro()     ,PDO::PARAM_STR);
        $stt->bindValue(7,  $objCliente->getUf()         ,PDO::PARAM_STR);
        $stt->bindValue(8,  $objCliente->getCep()        ,PDO::PARAM_STR);
        $stt->bindValue(9,  $objCliente->getComplemento(),PDO::PARAM_STR);
        $stt->bindValue(10, $objCliente->getNascimento() ,PDO::PARAM_STR);
        $stt->bindValue(11, $objCliente->getGenero()     ,PDO::PARAM_STR);
        
        if ( !$stt->execute() ){
            throw new Exception('Não foi possível salvar o cliente!<br>' . var_dump($stt->errorInfo()) );
        } 
        
        LogDAO::getInstance()->salvar(__METHOD__, $this->conn->lastInsertId(), __CLASS__);
        
        return true;
        
    }
    
    /**
     * Método responsávelpor alterar os dados do usuário
     * 
     * @param UsuarioVO $objUsuario
     */
    public function alterar(ClienteVO $objCliente){
        $sql = 'Update 
                    cliente 
                set 
                    nome        = :nome,
                    email       = :email,
                    telefone    = :telefone,
                    celular     = :celular,
                    cidade      = :cidade,
                    bairro      = :bairro,
                    uf          = :uf,
                    cep         = :cep,
                    complemento = :complemento,
                    nascimento  = :nascimento,
                    genero      = :genero
                where
                    id = :id';
        
        $nome        = $objCliente->getNome();
        $email       = $objCliente->getEmail();
        $telefone    = $objCliente->getTelefone();
        $celular     = $objCliente->getCelular();
        $cidade      = $objCliente->getCidade();
        $bairro      = $objCliente->getBairro();
        $uf          = $objCliente->getUf();
        $cep         = $objCliente->getCep();
        $complemento = $objCliente->getComplemento();
        $nascimento  = $objCliente->getNascimento();
        $genero      = $objCliente->getGenero();
        $id          = $objCliente->getId();
        
        $stt = $this->conn->prepare($sql);  
        $stt->bindParam(':nome',        $nome);
        $stt->bindParam(':email',       $email);
        $stt->bindParam(':telefone',    $telefone);
        $stt->bindParam(':celular',     $celular);
        $stt->bindParam(':cidade',      $cidade);
        $stt->bindParam(':bairro',      $bairro);
        $stt->bindParam(':uf',          $uf);
        $stt->bindParam(':cep',         $cep);
        $stt->bindParam(':complemento', $complemento);
        $stt->bindParam(':nascimento',  $nascimento);
        $stt->bindParam(':genero',      $genero);
        $stt->bindParam(':id',          $id);
        
        
        if ( !$stt->execute() ){
            throw new Exception('Não foi possível salvar o cliente!<br>' . var_dump($stt->errorInfo()) );
        } 
        
        LogDAO::getInstance()->salvar(__METHOD__, $objCliente->getId(), __CLASS__);
        
        return true;
        
    }
    
    /**
     * Método responsável por buscar todos os dados do usuário.<br>
     * 
     * @param UsuarioBO $objUsuarioBO
     */
    public function pesquisarDados(ClienteBO $objClienteBO){
        $sql = 'select * from cliente where nome like ? or email like ?';
                
        
        $stt = $this->conn->prepare($sql);  
        $stt->bindValue(1, $objClienteBO->getCliente()->getNome(),PDO::PARAM_STR);
        $stt->bindValue(2, $objClienteBO->getCliente()->getEmail(),PDO::PARAM_STR);
        
        if ( !$stt->execute() ){
            throw new Exception('Não foi possível pesquisar os dados do cliente!' . __METHOD__ );
        } 
       
        
        $listaObjClienteBO = array();
        while( $tmp = $stt->fetch(PDO::FETCH_ASSOC) ){
            
            $objClienteBO = new ClienteBO();
            $objClienteBO->getCliente()->setId($tmp['id']);
            $objClienteBO->getCliente()->setNome($tmp['nome']); 
            $objClienteBO->getCliente()->setEmail($tmp['email']);
            
            $listaObjClienteBO[] = $objClienteBO;
            
        }
        
        return $listaObjClienteBO;
    }
    
    /**
     * Método responsável por pegar os dados do usuário.<br>
     * 
     * @param DadosUsuarioBO $objUsuarioBO
     */
    public function pesquisar( ClienteBO $objClienteBO){
        $sql = 'select * from cliente where id = ?';
        
        $stt = $this->conn->prepare($sql);  
        $stt->bindValue(1, $objClienteBO->getCliente()->getId(),PDO::PARAM_INT);
        
        
        
        if ( !$stt->execute() ){
            throw new Exception('Não foi possível pegar os dados do cliente!' . __METHOD__ );
        } 
        
        $tmp = $stt->fetch(PDO::FETCH_ASSOC);
        
        $nascimento = implode('/', array_reverse(explode('-', $tmp['nascimento'])));
        
        $objClienteBO->getCliente()->setId         ($tmp['id']);
        $objClienteBO->getCliente()->setNome       ($tmp['nome']);
        $objClienteBO->getCliente()->setEmail      ($tmp['email']);
        $objClienteBO->getCliente()->setTelefone   ($tmp['telefone']);
        $objClienteBO->getCliente()->setCelular    ($tmp['celular']);
        $objClienteBO->getCliente()->setCidade     ($tmp['cidade']);
        $objClienteBO->getCliente()->setBairro     ($tmp['bairro']);
        $objClienteBO->getCliente()->setUf         ($tmp['uf']);
        $objClienteBO->getCliente()->setCep        ($tmp['cep']);
        $objClienteBO->getCliente()->setComplemento($tmp['complemento']);
        $objClienteBO->getCliente()->setNascimento ($nascimento);
        $objClienteBO->getCliente()->setGenero     ($tmp['genero']);

            
        return true;   
    }
    
    /**
     * Método para excluir um usuário do sistema.
     * 
     * @param UsuarioVO $objUsuarioVO
     * @return boolean 
     */
    public function excluir(ClienteVO $objClienteVO ){
        $sql = 'delete from cliente where id = ?';
        
        $stt = $this->conn->prepare($sql);
        $stt->bindValue(1, $objClienteVO->getId(), PDO::PARAM_INT);
        
        if ( !$stt->execute() ){
            throw new Exception('Não foi possível salvar o cliente!<br>' . var_dump($stt->errorInfo()) );
        } 
        
        LogDAO::getInstance()->salvar(__METHOD__, $objClienteVO->getId(), __CLASS__);
        
        return true;
    }
    
    public function getAll(){
         $sql = 'select * from cliente';
        
        $stt = $this->conn->prepare($sql);  

        if ( !$stt->execute() ){
            throw new Exception('Não foi possível pegar os dados do cliente!' . __METHOD__ );
        } 
        
        $listaClientes = array();
        while($tmp = $stt->fetch(PDO::FETCH_ASSOC)){
            $objCliente = new ClienteVO();
            
            $objCliente->setId($tmp['id']);
            $objCliente->setNome($tmp['nome']);
            
            $listaClientes[] = $objCliente;
        }
        
        return $listaClientes;   
    }
}

?>
